﻿#define _CRT_SECURE_NO_WARNINGS 0

#include <bits/stdc++.h>
using namespace std;

void testOS4()
{
	FILE* fp = fopen("homework.txt", "w+");
	if (fp == NULL)
	{
		perror("fopen fail!\n");
		exit(1);
	}
	fprintf(fp, "%s", "linux so easy!");
	char str[30];
	rewind(fp);
	fscanf(fp, "%s", str);
	printf("%s", str);
	fclose(fp);
}

void test()
{
	char str1[10], str2[10], str3[10], str4[10];
	FILE* fp;

	fp = fopen("file.txt", "w");
	fputs("linux is so easy", fp);

	rewind(fp);
	fscanf(fp, "%s %s %s %s", str1, str2, str3, str4);

	printf("%s\n", str1);
	printf("%s\n", str2);
	printf("%s\n", str3);
	printf("%s\n", str4);

	fclose(fp);
}

int main()
{
	testOS4();

	return 0;
}



//#include <unistd.h>

//int main()
//{
//	pid_t pid;
//	if ((pid = fork()) == -1)
//		perror("fork"), exit(1);
//	if (pid == 0) 
//	{
//		sleep(20);
//		exit(10);
//	}
//	else 
//	{
//		int st;
//		int ret = wait(&st);
//		if (ret > 0 && (st & 0X7F) == 0) 
//		{ 
//			// 正常退出
//			printf("child exit code:%d\n", (st >> 8) & 0XFF);
//		}
//		else if (ret > 0) 
//		{ 
//			// 异常退出
//			printf("sig code : %d\n", st & 0X7F);
//		}
//	}
//}

//void func(string s)
//{
//	string tmp;
//	for (int i = 0; i < s.size(); i++)
//	{
//		if (s[i] != ' ')
//		{
//			tmp.push_back(s[i]);
//		}
//	}
//}


//int main()
//{
//	char* str = "hello linux";
//	*str = 'H';
//	return 0;
//}

//int g_val = 100;
//
//int main()
//{
//    //pid_t id = fork();
//    if(1)
//    {
//        // child
//        while(1)
//        {
//            int cnt = 5;
//            printf("pid:%d,ppid:%d,g_val:%d,&g_val:%p,cnt:%d\n",1,1,g_val,&g_val,cnt);
//            cnt--;
//            if(cnt == 0)
//            {
//                g_val = 200;
//            }
//            //sleep(1);
//        }
//    }
//    else  
//    {
//        // father
//        while(1)
//        {
//            printf("pid:%d,ppid:%d,g_val:%d,&g_val:%p\n",1,1,g_val,&g_val);
//            //sleep(1);
//        }
//    }
//    return 0;
//}


//#include <stdio.h>
//
//int main(int argc, char* argv[], char* env[])
//{
//	int i = 0;
//	for (; env[i]; i++)
//	{
//		printf("%d:%s\n", i, env[i]);
//	}
//	return 0;
//}


//#include <stdio.h>
//#include <string.h>
//
//int main(int argc, char* argv[])
//{
//	if (argc == 2)
//	{
//		if (strcmp(argv[0], "touch") == 0)
//		{
//			FILE* pf = fopen(argv[1], "w");
//			if (pf == NULL)
//			{
//				perror("fopen fail\n");
//				return 1;
//			}
//			fclose(pf);
//		}
//	}
//	else
//	{
//		printf("commend error,you should use touch [name]\n");
//	}
//	return 0;
//}

//int main(int argc, char* argv[])
//{
//	int i = 0;
//	for (i = 0; i < argc; i++)
//	{
//		printf("%d:%s\n", argc, argv[i]);
//	}
//	return 0;
//}

//#include <iostream>
//using namespace std;
//
//template<class T1, class T2>
//
//class Data
//
//{
//
//public:
//
//	Data() { cout << "Data<T1, T2>" << endl; }
//
//private:
//
//	T1 _d1;
//
//	T2 _d2;
//
//};
//
//template <class T1>
//
//class Data<T1, int>
//
//{
//
//public:
//
//	Data() { cout << "Data<T1, int>" << endl; }
//
//private:
//
//	T1 _d1;
//
//	int _d2;
//
//};
//
//template <typename T1, typename T2>
//
//class Data <T1*, T2*>
//
//{
//
//public:
//
//	Data() { cout << "Data<T1*, T2*>" << endl; }
//
//private:
//
//	T1 _d1;
//
//	T2 _d2;
//
//};
//
//template <typename T1, typename T2>
//
//class Data <T1&, T2&>
//
//{
//
//public:
//
//	Data(const T1& d1, const T2& d2)
//
//		: _d1(d1)
//
//		, _d2(d2)
//
//	{
//
//		cout << "Data<T1&, T2&>" << endl;
//
//	}
//
//private:
//
//	const T1& _d1;
//
//	const T2& _d2;
//
//};
//
//int main()
//
//{
//
//	Data<double, int> d1;
//
//	Data<int, double> d2;
//
//	Data<int*, int*> d3;
//
//	Data<int&, int&> d4(1, 2);
//
//	return 0;
//
//}

//int main(int argc, char* argv[])
//{
//	return 0;
//}


//template <typename Type>
//Type Max(const Type& a, const Type& b)
//{
//	cout << "This is Max<Type>" << endl;
//	return a > b ? a : b;
//}
//
//template<>
//int Max<int>(const int& a, const int& b)
//{
//	cout << "This is Max<int>" << endl;
//	return a > b ? a : b;
//}
//
//template<>
//char Max<char>(const char& a, const char& b)
//{
//	cout << "This is Max<char>" << endl;
//	return a > b ? a : b;
//}
//
//int Max(const int& a, const int& b)
//{
//	cout << "This is Max" << endl;
//	return a > b ? a : b;
//}
//
//int main()
//{
//	Max(10, 20);
//	Max(12.34, 23.45);
//	Max('A', 'B');
//	Max<int>(20, 30);
//}